package com.wzy.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.wzy.domain.OssFile;
import com.wzy.domain.ResponseResult;
import com.wzy.domain.bo.ArticleBO;
import com.wzy.domain.bo.ArticleExamineBO;
import com.wzy.domain.entity.Article;
import com.wzy.domain.entity.ArticleRecord;
import com.wzy.domain.vo.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 文章业务层
 */
public interface ArticleService extends IService<Article>
{

    /**
     * 获取热门文章列表
     */
    ResponseResult<Collection<HotArticleVO>> getHotArticleList();

    /**
     * 查询最新发布文章
     */
    ResponseResult<List<ArticleListVO>> getLatestArticleList();

    /**
     * 分页查询文章列表
     */
    ResponseResult<PageVO> getArticleListByCategoryId(Integer pageNum, Integer pageSize, Long categoryId);

    /**
     * 获取文章详情
     */
    ResponseResult<ArticleVO> getArticle(Long id);

    /**
     * 更新文章浏览量
     */
    ResponseResult<Void> updateViewCount(Long id);

    /**
     * 上传文章图片
     */
    ResponseResult<OssFile> uploadImage(MultipartFile file);

    /**
     * 删除文章图片
     */
    ResponseResult<OssFile> deleteImage(String url);

    /**
     * 保存文章
     */
    ResponseResult<Object> postArticle(SaveArticleVO article);

    /**
     * 获取草稿
     */
    ResponseResult<List<SaveArticleVO>> getDraftList();

    /**
     * 获取编辑记录
     */
    ResponseResult<List<Object>> getEditHistory();

    /**
     * 删除草稿
     */
    ResponseResult<Void> deleteDraft(Long articleId);

    /**
     * 获取我发布的文章总数
     */
    ResponseResult<Map<String, Integer>> getMyArticleTotal();

    /**
     * 获取我发布的文章总浏览量
     */
    ResponseResult<Map<String, Long>> getTotalView();

    /**
     * 查询提交审核文章
     */
    ResponseResult<PageVO> getNotExamineArticle(ArticleExamineBO articleExamineBO);

    /**
     * 修改审核文章状态
     */
    ResponseResult<Void> editArticleExamine(Article article);

    /**
     * 获取文章编辑详情
     */
    ResponseResult<ArticleRecord> getArticleEditRecord(Long recordId);

    /**
     * 管理员查询文章
     */
    ResponseResult<PageVO> selectPageArticle(ArticleBO articleBO);
}
